package com.wing.bill.dao;


import com.wing.cabinet.model.response.CabinetVO;
import com.wing.cabinet.model.response.CellSingleInventoryProductVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;

@Mapper
public interface WorkshopReportDao {

    /**
     * 查询领料总数量或者金额
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @return
     */
    HashMap queryMaterialSumQuantityOrMoney(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code, @Param("param") String param,@Param("mainCabCode") String mainCabCode);

    /**
     * 总缺货告警数（个）
     * @param mainCabCode
     * @return
     */
    HashMap queryStockWarnedNumber(@Param("mainCabCode") String mainCabCode);

    /**
     * 总领料SKU数（个）
     * @param startTime
     * @param endTime
     * @param code
     * @return
     */
    HashMap queryMaterialSKUQuantity(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code, @Param("mainCabCode") String mainCabCode);

    /**
     * 总消耗物料数量（个）
     * @param startTime
     * @param endTime
     * @param code
     * @return
     */
    HashMap queryMaterialQuantity(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code, @Param("mainCabCode") String mainCabCode);

    /**
     * 总消耗物料金额 （元）
     * @param startTime
     * @param endTime
     * @param code
     * @return
     */
    HashMap queryMaterialMoney(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code, @Param("mainCabCode") String mainCabCode);

    /**
     * 总缺货告警数（个）详情
     * @param mainCabCode
     * @return
     */
    List<CellSingleInventoryProductVO> queryStockWarnedNumberDetail(@Param("mainCabCode") String mainCabCode);

    /**
     * 总领料SKU数（个）详情
     * @param startTime
     * @param endTime
     * @param code
     * @return
     */
    List<HashMap> queryMaterialSKUQuantityDetail(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code, @Param("mainCabCode") String mainCabCode);

    /**
     * 总消耗物料数量、物料金额详情
     * @param startTime
     * @param endTime
     * @param code
     * @return
     */
    List<HashMap> queryMaterialDetail(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code, @Param("mainCabCode") String mainCabCode);

    /**
     * 领料趋势变化图
     * @param param
     * @param code
     * @param mainCabCode
     * @return
     */
    List<HashMap> queryMaterialRequisitionTrend(@Param("param") String param,@Param("code") String code, @Param("mainCabCode") String mainCabCode);

    /**
     * 领料趋势变化图平均值
     * @param param
     * @param code
     * @param mainCabCode
     * @return
     */
    HashMap queryMaterialRequisitionTrendAvg(@Param("param") String param,@Param("code") String code, @Param("mainCabCode") String mainCabCode);

    /**
     * 每日领料时间对比图
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> findMaterialTimeComparisonByDay(@Param("code")String code, @Param("mainCabCode")String mainCabCode,@Param("param") String param);

    /**
     * 每周领料时间对比图
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> findMaterialTimeComparisonByWeek(@Param("code")String code, @Param("mainCabCode")String mainCabCode,@Param("param") String param);

    /**
     * 每月领料时间对比图
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> findMaterialTimeComparisonByMonth( @Param("code")String code, @Param("mainCabCode")String mainCabCode,@Param("param") String param);

    /**
     * 固定按日查询领料时间对比
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> findFixedDateMaterialTimeComparison(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime,@Param("code")String code, @Param("mainCabCode")String mainCabCode,@Param("param") String param);


    /**
     * 设备领料对比图（TOP10）
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryEquipmentMaterialComparison(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode);

    /**
     * 人员领料对比图（TOP10)
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryPersonnelMaterialComparison(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode, @Param("databaseUser") String databaseUser);

    /**
     * 工单领料对比图（TOP10)
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryWorkOrderMaterialComparison(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode);

    /**
     * 车间领料对比
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryWorkshopMaterialComparison(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode);

    /**
     * 供应商物料消耗对比
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> querySupplierMaterialComparison(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode);

    /**
     * 产品领料对比
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryProductMaterialComparison(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode);

    /**
     * 领料品牌对比
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryBrandMaterialComparison(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode);

    /**
     * 查询主柜下副柜信息
     * @param mainCabCode
     * @return
     */
    List<CabinetVO> getAuxiliaryCabinet(@Param("mainCabCode") String mainCabCode);
    /**
     * 物料消耗智能柜对比
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryCabinetMaterialComparison(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode,@Param("codeList") List<String> codeList);

    /**
     * 领料物料分类对比
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryCategoryMaterialComparison(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode);

    /**
     * 异常统计对比（按天）
     * @param code
     * @param param
     * @return
     */
    List<HashMap> queryAbnormalStatisticsByDay( @Param("code") String code,@Param("param") String param);

    /**
     * 异常统计对比（日周月）
     * @param code
     * @param param
     * @return
     */
    List<HashMap> queryAbnormalStatistics(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode);

    /**
     * 异常物料排名
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryAbnormalMaterial(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode);

    /**
     * 异常登记人员对比
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryAbnormalRegistrationComparison(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode);

    /**
     * 异常总计
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryAbnormalCauseAnalysisTotal(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode);

    /**
     * 异常原因占比分析
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryAbnormalCauseAnalysis(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode);

    /**
     * 领新柜物料占比总计
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryGetNewMaterialComparisonTotal(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode);

    /**
     * 领新柜物料占比
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryGetNewMaterialComparison(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode);

    /**
     * 未归还物料占比总计
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryReturnedMaterialComparisonTotal(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode);
    /**
     * 未归还物料占比
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryReturnedMaterialComparison(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode);

    /**
     * 暂存物料占比总计
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryTSMCTotal(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode);
    /**
     * 暂存物料占比总计（单个值）
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryTSMCTotalOne(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode);
    /**
     * 暂存物料占比
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryTSMC(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode);

    /**
     * 采购物料规格型号占比总计
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryPMMCTotal(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode);
    /**
     * 采购物料规格型号占比总计（单个值）
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryPMMCTotalOne(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode);
    /**
     * 采购物料规格型号占比
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryPMMC(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode);

    /**
     * 采购物料供应商占比分析
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryPMSC(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode);


    /**
     * 暂存物料品牌占比分析总计（单个值）
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryTSMBCTotalOne(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode);
    /**
     * 暂存物料品牌占比分析
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryTSMBC(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode);

    /**
     * 报修|报废统计(按天)
     * @param code
     * @param param
     * @param businessTypeChecked
     * @return
     */
    List<HashMap> queryCheckedResultStatisticsByDay(@Param("code") String code,@Param("param") String param, @Param("businessTypeChecked") Integer businessTypeChecked);

    /**
     * 报废|报修物料规格型号占比总计
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryCheckedResultTotal(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode, @Param("businessTypeChecked") Integer businessTypeChecked);
    /**
     * 报废|报修物料规格型号占比
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryCheckedResultMC(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode, @Param("businessTypeChecked") Integer businessTypeChecked);
    /**
     * 报废|报修物料规格型号占比（单个值）
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryRMMCTotalOne(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode, @Param("businessTypeChecked") Integer businessTypeChecked);

    /**
     * 报失物料规格型号占比总计
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @return
     */
    List<HashMap> queryLostResultTotal(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code, @Param("mainCabCode") String mainCabCode, @Param("type") Integer businessType);
    /**
     * 报失物料规格型号占比
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @param param
     * @return
     */
    List<HashMap> queryLostResultMC(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode, @Param("type") Integer businessType);

    /**
     * 报失统计对比（按天）
     * @param code
     * @param param
     * @return
     */
    List<HashMap> queryLostResultStatisticsByDay( @Param("code") String code,@Param("param") String param, @Param("type") Integer businessType);

    /**
     * 报失统计对比（日周月）
     * @param code
     * @param param
     * @return
     */
    List<HashMap> queryLostResultStatistics(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code,@Param("param") String param, @Param("mainCabCode") String mainCabCode, @Param("type") Integer businessType);
    /**
     * 报失物料(按人员)
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @return
     */
    List<HashMap> queryLostResultByCreatorTotalOne(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code, @Param("mainCabCode") String mainCabCode, @Param("type") Integer businessType);
    /**
     * 报失物料(按人员)
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @return
     */
    List<HashMap> queryLostResultByCreator(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code, @Param("mainCabCode") String mainCabCode, @Param("type") Integer businessType);
    /**
     * 报失物料(按设备)
     * @param startTime
     * @param endTime
     * @param code
     * @param mainCabCode
     * @return
     */
    List<HashMap> queryLostResultByDevice(@Param("start") LocalDateTime startTime, @Param("end") LocalDateTime endTime, @Param("code") String code, @Param("mainCabCode") String mainCabCode, @Param("type") Integer businessType);

    List<HashMap> findMissMaterialCostCenter(@Param("start") LocalDateTime startTime,@Param("end") LocalDateTime endTime
            , @Param("code") String code,@Param("mainCabCode") String mainCabCode);

    List<HashMap> findMissMaterialCostCenterList(@Param("start") LocalDateTime startTime,@Param("end") LocalDateTime endTime
            , @Param("code") String code,@Param("mainCabCode") String mainCabCode, @Param("param") String param);

}
